package org.example.shoppingmall.service;

import org.example.shoppingmall.entity.Cart;
import org.example.shoppingmall.entity.Goods;

import java.math.BigDecimal;
import java.util.List;

public interface CartService {
    /**
     * 删除购物车里已选商品
     * @param goods_id
     * @return
     */
    public boolean goodsDelete(Integer goods_id,Integer user_id);

    /**
     * 修改购物车内某商品购买数量
     * @param goods_id
     * @param quantity
     * @return
     */
    public boolean cartUpdate(Integer goods_id,Integer quantity,Integer user_id);
    /**
     * 获取购物车内商品列表并返回
     * @param page_size
     * @param page
     * @return
     */
    public List<Goods> goodsSearchInCart(Integer page_size, Integer page,Integer user_id);
    /**
     * 记录购物车内有多少条商品数据
     * @param
     * @param
     * @return
     */
    public Integer goodsCountInCart(Integer user_id);

    /**
     * 选取购物车内要买的商品
     * @param goodsIdList
     * @return
     */
    public List<Cart> getInfoFromCart(List<Integer> goodsIdList);

    /**
     * 结算后库存的数量
     * @param goodsIdList
     * @return
     */
    public List<Integer> stockCalculate(List<Integer> goodsIdList,Integer user_id);

    /**
     * 结算后余额的多少
     * @param goodsIdList
     * @param user_id
     * @return
     */
    public BigDecimal balanceCalculate(List<Integer> goodsIdList,Integer user_id);

    /**
     * 将购物车结算成订单(二重判断之后)
     * @param address
     * @param phone
     * @return
     */
    public boolean settleIntoOrder(String address, String phone, List<Cart> cartList);
    /**
     * 结算账户余额,修改数据库(二重判断之后)
     * @param id
     * @param amount
     * @return
     */
    public boolean reduceBalance(Integer id,BigDecimal amount);

    /**
     *修改商品库存,修改数据库(二重判断之后)
     * @param goodsIDList
     * @return
     */
    public boolean updateStock(List<Integer> goodsIDList,List<Integer> stock);

    /**
     * 通过比较要花费的钱和余额判断是否能结账（判断一）
     * @param goodsIdList
     * @param user_id
     * @return
     */
    public boolean moneyJudging(List<Integer> goodsIdList,Integer user_id);

    /**
     * 通过比较要购买数量和库存判断是否能结账（判断二）
     * @param goodsIdList
     * @return
     */
    public boolean quantityJudging(List<Integer> goodsIdList,Integer user_id);


}
